Как скомпилировать приложение c ++ в режиме x64 на 64-битной машине Windows?

Я установил инструменты платформы Windows SDK 7.1 и открыл терминал с именем Microsoft Windows 7 x64 Debug Build Environment, Теперь я хочу скомпилировать C++ заявка main.cpp) с использованием cl.exe команда. Команда компиляции:

    cl main.cpp

Затем он выводит main.obj а также main.exe файл. Но когда я пытался бежать main.exeразбился после begin computing dist и раньше end computing dist. Я думаю, что я должен скомпилировать приложение в x64 программа. Кто-нибудь может дать совет, пожалуйста?

main.cpp как следует:

    #include <cstdio>
#include <cstdlib>
#ifdef _MSC_VER
typedef unsigned __int32 uint32_t;
typedef unsigned __int64 uint64_t;
#include <intrin.h>
#include <windows.h>
#else
#include <stdint.h>
#include <sys/time.h>
#include <unistd.h>
#endif

int main(int argc, char **argv) {

int nTrn = 10;
int nTst = 10;
int nDim = 1; // 64 bit
printf("allocate memory for feats.\n");
uint64_t *trn_feat = new uint64_t[nTrn]; // nTrn x nDim
uint64_t *tst_feat = new uint64_t[nTst]; // nTst x nDim

printf("initialize the feats.\n");
for(int i=0; i<nTrn; i++)
trn_feat[i] = (((uint64_t) rand() <<  0) & 0x000000000000FFFFull) |
(((uint64_t) rand() << 16) & 0x00000000FFFF0000ull) |
(((uint64_t) rand() << 32) & 0x0000FFFF00000000ull) |
(((uint64_t) rand() << 48) & 0xFFFF000000000000ull);
for(int i=0; i<nTst; i++)
tst_feat[i] = (((uint64_t) rand() <<  0) & 0x000000000000FFFFull) |
(((uint64_t) rand() << 16) & 0x00000000FFFF0000ull) |
(((uint64_t) rand() << 32) & 0x0000FFFF00000000ull) |
(((uint64_t) rand() << 48) & 0xFFFF000000000000ull);

printf("allocate memory for dist matrix.\n");
uint64_t *dist = new uint64_t[nTrn*nTst];

#ifdef _MSC_VER
LARGE_INTEGER StartingTime, EndingTime, ElapsedMicroseconds;
LARGE_INTEGER Frequency;
QueryPerformanceFrequency(&Frequency);
QueryPerformanceCounter(&StartingTime);
#else
struct timeval start, end;
long seconds, useconds;
double mtime;
gettimeofday(&start, NULL);
#endif

printf("begin computing dist.\n");
for(int iter=0; iter<100; iter++) {
for(int i=0; i<nTrn; i++) {
for(int j=0; j<nTst; j++) {
uint64_t n = (trn_feat[i] ^ tst_feat[j]);
#ifdef _MSC_VER
dist[i*nTst + j] = __popcnt64(n);
#else
dist[i*nTst + j] = __builtin_popcountll(n);
#endif
}
}
}
printf("end computing dist.\n");

#ifdef _MSC_VER
QueryPerformanceCounter(&EndingTime);
ElapsedMicroseconds.QuadPart = EndingTime.QuadPart - StartingTime.QuadPart;
ElapsedMicroseconds.QuadPart *= 1000000;
ElapsedMicroseconds.QuadPart /= Frequency.QuadPart;
double mtime = (double)ElapsedMicroseconds.QuadPart;
printf("Average time: %.6f nanoseconds\n", (1e6*mtime)/100/(nTrn*nTst));
#else
gettimeofday(&end, NULL);
seconds = end.tv_sec - start.tv_sec;
useconds = end.tv_usec - start.tv_usec;
mtime = ((seconds) * 1000 + useconds/1000.0) + 0.5;
printf("Total elapsed time: %.6f milliseconds\n", mtime);
printf("Average time: %.6f nanoseconds\n", (1e6*mtime)/1000/(nTrn*nTst));
#endif

delete[] trn_feat;
delete[] tst_feat;
delete[] dist;

}

2

Решение

Ниже возможный ответ:

  1. устанавливать Visual Studio Community 2015
  2. Открой Visual Studio x64 terminal от Visual Studio Group
  3. cl.exe main.cpp /link /machine:x64

Затем main.exe это считается.

Чтобы запустить main.exeЕсть два необходимых условия:

  1. Машина или процессор может поддерживать __popcnt64 набор инструкций. Чтобы проверить, поддерживает ли машина это, обратитесь __cpuid.
  2. Операционная система Windows является 64-битной.
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector