小编Tia*_*642的帖子

可以在多台计算机上使用OpenCL吗?

据我所知,答案是否定的.OpenCL专为多核系统而设计.

但是,有没有办法在多台计算机上使用OpenCL(每台计算机都是多核系统)?如果没有,是否需要任何其他工具,框架?

我读了一些关于分布式计算,集群计算,网格计算的文章......但我找不到满意的答案

任何想法将不胜感激

谢谢 :)

parallel-processing distributed-computing cluster-computing grid-computing opencl

7
推荐指数
1
解决办法
4194
查看次数

减少gcc内存使用

目前,我必须在非常有限的硬件(只有2GB RAM的i5内核)上构建一个相当大的项目。在运行带有4个线程的make时,由于每个线程吃掉40%的RAM,gcc崩溃了。我在谷歌上搜索了一下,发现了这个链接。少数人反馈它有效,但是不是我。

这是我做的。

/usr/bin/qmake-qt4 -r -spec linux-g++ $DEBUG_FLAGS -o Makefile "QMAKE_CXXFLAGS +=  --param ggc-min-expand=10 --param ggc-min-heapsize=8192"  /home/build-srv/LargeProject/largeProject.pro
Run Code Online (Sandbox Code Playgroud)

make输出确实具有标志:

g++ -c -pipe --param ggc-min-expand=10 --param ggc-min-heapsize=8192 -std=c++11 -std=c++11 -g -Wall -W -D_REENTRANT -fPIC -D_GLIBCXX_USE_CXX11_ABI=0 -DBASE_LIBRARY -DQT_DECLARATIVE_DEBUG -DQT_DECLARATIVE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++  -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtDeclarative...
Run Code Online (Sandbox Code Playgroud)

但是ram的用法仍然相同。唯一的方法是减少到单线程构建,这非常慢。

我做错什么了?有没有更好的解决方案呢?

更新

  • 是的,硬件部门将RAM容量“升级”到4GB,现在在构建项目时它可以响应。(实际上,一根棍子破了,所以他们需要等待更换)。但是我很好奇,在像VPS这样的有限资源系统中,我们该如何处理呢?(除了减少构建线程?)
  • 编译/链接时,我将搜索占用大量RAM的文件。我不记得这个名字,因为那不是我的模块。
  • 构建服务器具有2GB的交换空间。

c++ qt multithreading gcc build

4
推荐指数
1
解决办法
3566
查看次数

删除字符串算法中的重复项

我的作业是删除随机字符串中的重复项。我的想法是使用2个循环来解决问题。

第一个将扫描字符串中的每个字符。第二个将检查字符是否重复。如果是这样,请删除该字符。

string content = "Blah blah..."

    for (int i = 0; i < content.size(); ++i) {
            char check = content.at(i);
            for (int j = i + 1; j < content.size() - 1; ++j) {
                if (check == content.at(j)) {
                    content.erase(content.begin()+j);

                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

问题是它不起作用。它总是删除错误的字符。似乎是索引问题,但我不明白为什么。

临时解决办法是改变content.erase(content.begin()+j);content.erase( remove(content.begin() + i+1, content.end(), check),content.end());

但我认为触发“按值删除”扫描并不是一个好方法。我想用 2 个或更少的循环来完成。

任何想法将不胜感激:)

c++ string algorithm loops erase

1
推荐指数
2
解决办法
1万
查看次数

删除QNetworkReply*回复导致代码之外的SIGSEGV?

我写了一个简单的程序来自动设置路由器的过程.检查后,我发现一个指针需要delete(QNetworkReply *replyreplyFinish())并完成工作,但在那之后程序崩溃和Qt显示它停止在一些汇编代码:(

所以我的问题是:

  1. 是否有任何常见的做法来处理这种情况(Qt显示程序在某些汇编代码中停止)

  2. 删除不再使用的指针时,我做错了什么?(非常确定)

这是代码:

#ifndef HTTPGETTER_H
#define HTTPGETTER_H
class QNetworkAccessManager;
class QNetworkReply;
class QNetworkRequest;
class QAuthenticator;
#include <QObject>

class httpGetter : public QObject
{
    Q_OBJECT
private:
    QNetworkAccessManager *nam;
public:
    explicit httpGetter(QObject *parent=0);
    ~httpGetter();
public slots:
    void replyFinish(QNetworkReply* reply);
    void onAuthen(QNetworkReply*,QAuthenticator*);
};
Run Code Online (Sandbox Code Playgroud)

器物

#include "httpgetter.h"
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkAccessManager>
#include <QAuthenticator>
#include <QDebug>
httpGetter::httpGetter(QObject *parent) : QObject(parent)
{
    nam = new QNetworkAccessManager(this);
    QObject::connect(nam,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinish(QNetworkReply*)));
    QObject::connect(nam,SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),this,SLOT(onAuthen(QNetworkReply*,QAuthenticator*)));

    QUrl url("http://192.168.1.1");
    QNetworkReply *reply= nam->get(QNetworkRequest(url));


}
httpGetter::~httpGetter(){ …
Run Code Online (Sandbox Code Playgroud)

c++ qt segmentation-fault

0
推荐指数
1
解决办法
750
查看次数

处理构造函数的condtional参数

我的程序以这种方式工作:如果用户输入数据路径参数,它将使用该路径.如果不是,它使用程序的当前路径.

构造函数是Server(QString path).

显然,这不起作用:

if(!isDefaultPath)
   Server server(userPath);
else
   Server server(programPath);
server.doSmth();
Run Code Online (Sandbox Code Playgroud)

目前,我喜欢这个

Server serverDefault(programPath);
Server serverCustomized(userPath);
if(!isDefaultPath)
       serverCustomized.doSmth();
    else
       serverDefault.doSmth();
Run Code Online (Sandbox Code Playgroud)

但我觉得这不好.有没有更好的方法来做到这一点?

c++ constructor

0
推荐指数
1
解决办法
30
查看次数