| 1639 | // ---------------------------------------------------------------------------- |
| 1640 | |
| 1641 | void VanitySearch::Search(int nbThread,std::vector<int> gpuId,std::vector<int> gridSize) { |
| 1642 | |
| 1643 | double t0; |
| 1644 | double t1; |
| 1645 | endOfSearch = false; |
| 1646 | nbCPUThread = nbThread; |
| 1647 | nbGPUThread = (useGpu?(int)gpuId.size():0); |
| 1648 | nbFoundKey = 0; |
| 1649 | |
| 1650 | memset(counters,0,sizeof(counters)); |
| 1651 | |
| 1652 | printf("Number of CPU thread: %d\n", nbCPUThread); |
| 1653 | |
| 1654 | TH_PARAM *params = (TH_PARAM *)malloc((nbCPUThread + nbGPUThread) * sizeof(TH_PARAM)); |
| 1655 | memset(params,0,(nbCPUThread + nbGPUThread) * sizeof(TH_PARAM)); |
| 1656 | |
| 1657 | // Launch CPU threads |
| 1658 | for (int i = 0; i < nbCPUThread; i++) { |
| 1659 | params[i].obj = this; |
| 1660 | params[i].threadId = i; |
| 1661 | params[i].isRunning = true; |
| 1662 | |
| 1663 | #ifdef WIN64 |
| 1664 | DWORD thread_id; |
| 1665 | CreateThread(NULL, 0, _FindKey, (void*)(params+i), 0, &thread_id); |
| 1666 | ghMutex = CreateMutex(NULL, FALSE, NULL); |
| 1667 | #else |
| 1668 | pthread_t thread_id; |
| 1669 | pthread_create(&thread_id, NULL, &_FindKey, (void*)(params+i)); |
| 1670 | ghMutex = PTHREAD_MUTEX_INITIALIZER; |
| 1671 | #endif |
| 1672 | } |
| 1673 | |
| 1674 | // Launch GPU threads |
| 1675 | for (int i = 0; i < nbGPUThread; i++) { |
| 1676 | params[nbCPUThread+i].obj = this; |
| 1677 | params[nbCPUThread+i].threadId = 0x80L+i; |
| 1678 | params[nbCPUThread+i].isRunning = true; |
| 1679 | params[nbCPUThread+i].gpuId = gpuId[i]; |
| 1680 | params[nbCPUThread+i].gridSizeX = gridSize[2*i]; |
| 1681 | params[nbCPUThread+i].gridSizeY = gridSize[2*i+1]; |
| 1682 | #ifdef WIN64 |
| 1683 | DWORD thread_id; |
| 1684 | CreateThread(NULL, 0, _FindKeyGPU, (void*)(params+(nbCPUThread+i)), 0, &thread_id); |
| 1685 | #else |
| 1686 | pthread_t thread_id; |
| 1687 | pthread_create(&thread_id, NULL, &_FindKeyGPU, (void*)(params+(nbCPUThread+i))); |
| 1688 | #endif |
| 1689 | } |
| 1690 | |
| 1691 | #ifndef WIN64 |
| 1692 | setvbuf(stdout, NULL, _IONBF, 0); |
| 1693 | #endif |
| 1694 | |
| 1695 | uint64_t lastCount = 0; |
| 1696 | uint64_t gpuCount = 0; |
| 1697 | uint64_t lastGPUCount = 0; |
| 1698 | |